package slcu.eventos.controllers;

import java.util.Map;

import javax.portlet.ActionRequest;
import javax.portlet.ActionResponse;

import slcu.eventos.ResultadoValidacion;
import slcu.eventos.registros.RegistroEvento;
import slcu.model.CategoriaDisciplina;

import com.liferay.portal.kernel.exception.SystemException;
import com.liferay.portal.kernel.log.Log;
import com.liferay.portal.kernel.log.LogFactoryUtil;
import com.liferay.portal.kernel.servlet.SessionErrors;
import com.liferay.portal.kernel.servlet.SessionMessages;
import com.liferay.portal.model.User;
import com.liferay.portal.util.PortalUtil;

public abstract class EventoDisciplinaController {
	
	private static Log _log = LogFactoryUtil.getLog(EventoDisciplinaController.class);
	protected CategoriaDisciplina categoriaDisciplina;	
	
	public EventoDisciplinaController(CategoriaDisciplina categoriaDisciplina) {
		this.categoriaDisciplina = categoriaDisciplina;
	}
	
	abstract public String getPaginaDeCreacion();
	abstract public String getPaginaIndice();
	abstract public String getPaginaDeEdicion();
	
	abstract RegistroEvento getRegistroEvento(Map<String, String[]> parameters);
	
	public void crearEvento(ActionRequest request, ActionResponse response, User createUser) {
		
		ResultadoValidacion resultadoValidacion = null;	
		RegistroEvento registroEvento = getRegistroEvento(request.getParameterMap());
		try {
			resultadoValidacion = registroEvento.validar();
		} catch (Exception e) {			
			_log.error("Error validando evento", e);
			SessionErrors.add(request, "error-no-esperado");
		}
		
		if (resultadoValidacion != null && !resultadoValidacion.esValido()) {
			for (String mensajeError : resultadoValidacion.getMensajesDeError()) {
				SessionErrors.add(request, mensajeError);
			}
			mostrarErroresAlCrear(request, response);
			return;
		} else {
			try {
				registroEvento.agendar(createUser);				
			} catch (SystemException e) {
				SessionErrors.add(request, "error-no-esperado");
				_log.error("Error agregando partido", e);
			}
		}
		
		response.setRenderParameter("disciplinaId", String.valueOf(categoriaDisciplina.getDisciplinaId()));
		response.setRenderParameter("categoriaId", String.valueOf(categoriaDisciplina.getCategoriaId()));
		
		SessionMessages.add(request, "evento-agendado");
		response.setRenderParameter("jspPage", "/html/eventos/view.jsp");
	
	}
	
	void mostrarErroresAlCrear(ActionRequest request, ActionResponse response) {
		if (!SessionErrors.isEmpty(request)) {
			response.setRenderParameter("categoriaId", Long.toString(categoriaDisciplina.getCategoriaId()));
			response.setRenderParameter("jspPage", getPaginaDeCreacion());
			PortalUtil.copyRequestParameters(request, response);
		}
	}

}
